package com.showmaker.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.showmaker.bean.CheckGroup;
import com.showmaker.entity.PageResult;
import com.showmaker.entity.QueryPageBean;
import com.showmaker.mapper.CheckGroupMapper;
import com.showmaker.service.CheckGroupService;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;

import java.util.HashMap;
import java.util.List;

@Transactional
@DubboService(interfaceClass = CheckGroupService.class, version = "1.0")
public class CheckGroupServiceImpl implements CheckGroupService {
    @Autowired
    private CheckGroupMapper checkGroupMapper;

    @Override
    public void add(Integer[] checkitemIds, CheckGroup checkGroup) {
        // 添加检查组的信息
        checkGroupMapper.add(checkGroup);

        // 获取添加到检查组表中自动生成的主键
        Integer checkGroupId = checkGroup.getId();

        // 添加该检查组相关的检查项的相关信息
        if (checkitemIds != null && checkitemIds.length > 0) {
            for (Integer checkitemId : checkitemIds) {
                HashMap<String, Integer> map = new HashMap<>();
                map.put("checkgroupId", checkGroupId);
                map.put("checkitemId", checkitemId);
                checkGroupMapper.addConnection(map);
            }
        }
    }

    @Override
    public PageResult page(QueryPageBean queryPageBean) {
        // 1.获取分页的相关信息
        Integer currentPage = queryPageBean.getCurrentPage();
        Integer pageSize = queryPageBean.getPageSize();
        String queryString = queryPageBean.getQueryString();

        // 2.如果需要按照条件进行，那么返回的结果就是从第1页开始展示的
        if (queryString != null) {
            currentPage = 1;
        }

        // 3.基于MyBatis框架的分页助手插件完成分页查询（分页插件基于本地线程）
        // 只需要配置这个语句，在底层Mybatis会自动在查询语句中添加上 limit 关键字
        PageHelper.startPage(currentPage, pageSize);

        // 4.调用 mapper 方法查询数据，MyBatis 会将数据封装好放入到 Page 对象里面
        Page<CheckGroup> page = checkGroupMapper.page(queryString);

        // 5.从 Page 对象中可以获取查询的结果，并将结果返回
        return new PageResult(page.getTotal(), page.getResult());
    }

    @Override
    public CheckGroup get(Integer id) {
        return checkGroupMapper.get(id);
    }

    @Override
    public List<Integer> items(Integer checkGroupId) {
        return checkGroupMapper.items(checkGroupId);
    }

    @Override
    public void updateCheckGroupAndCheckItem(Integer[] checkitemIds, CheckGroup checkGroup) {
        // 将检查组的信息更新
        checkGroupMapper.update(checkGroup);

        // 将当前检查组相关联的检查项删除
        checkGroupMapper.removeCheckItems(checkGroup.getId());

        // 添加新的检查项
        HashMap<String, Object> map = new HashMap<>();
        map.put("checkGroupId", checkGroup.getId());
        map.put("checkitemIds", checkitemIds);
        checkGroupMapper.addConnections(map);
    }

    @Override
    public List<CheckGroup> selectAll() {
        return checkGroupMapper.selectAll();
    }
}
